home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / SciAn / src / ScianScrDump.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  2KB  |  129 lines

  1. /*ScianScrDump.c
  2.   Eric Pepke
  3.   May 22, 1991
  4.   Screen dump pseudorecorder*/
  5.  
  6. #include "Scian.h"
  7. #include "ScianTypes.h"
  8. #include "ScianWindows.h"
  9. #include "ScianIDs.h"
  10. #include "ScianScrDump.h"
  11. #include "ScianRecorders.h"
  12.  
  13. static long curFrame = 0;
  14.  
  15. static ObjPtr ReturnTrue(object)
  16. ObjPtr object;
  17. /*Returns true*/
  18. {
  19.     return ObjTrue;
  20. }
  21.  
  22. static ObjPtr PrepareToRecordScrDump(object, nFrames)
  23. ObjPtr object;
  24. long nFrames;
  25. /*Prepares to record nframes*/
  26. {
  27.     curFrame = 0;
  28.     return ObjTrue;
  29. }
  30.  
  31. static ObjPtr SnapOneFrameScrDump(object)
  32. ObjPtr object;
  33. /*Do a screen dump of arbitrary size*/
  34. {
  35.     int l, b, r, t,  w, h;
  36.     ObjPtr var;
  37.  
  38.     var = GetVar(object, FRAMEOX);
  39.     if (var)
  40.     {
  41.     l = GetInt(var);
  42.     }
  43.     else
  44.     {
  45.     l = 0;
  46.     }
  47.  
  48.     var = GetVar(object, FRAMEOY);
  49.     if (var)
  50.     {
  51.     b = GetInt(var);
  52.     }
  53.     else
  54.     {
  55.     b = 0;
  56.     }
  57.  
  58.     var = GetVar(object, FRAMEWIDTH);
  59.     if (var)
  60.     {
  61.     w = GetInt(var);
  62.     }
  63.     else
  64.     {
  65.     w = 0;
  66.     }
  67.  
  68.     var = GetVar(object, FRAMEHEIGHT);
  69.     if (var)
  70.     {
  71.     h = GetInt(var);
  72.     }
  73.     else
  74.     {
  75.     h = 0;
  76.     }
  77.  
  78.     r = l + w - 1;
  79.     t = b + h - 1;
  80.     if (GetPredicate(object, SAVEWINDOWFRAME))
  81.     {
  82.         l -= WINBL;
  83.         r += WINBR;
  84.         b -= WINBB;
  85.         t += WINBT;
  86.     }
  87.  
  88.     do
  89.     {
  90.     ++curFrame;
  91.     sprintf(tempStr, "screen%04d.rgb", curFrame);
  92.     } while (fopen(tempStr, "r"));
  93.  
  94.     SetVar(object, FILENAME, NewString(tempStr));
  95.  
  96.     sprintf(tempStr, "scrsave screen%04d.rgb %d %d %d %d", 
  97.         curFrame, l, r, b, t);
  98.     system(tempStr);
  99.     return ObjTrue;
  100. }
  101.  
  102. #ifdef PROTO
  103. void InitScrDump(void)
  104. #else
  105. void InitScrDump()
  106. #endif
  107. /*Create a new screen dump ersatz recorder*/
  108. {
  109.     ObjPtr recorder;
  110.  
  111.     recorder = NewRecorder(NULLOBJ, "scrsave", "IRIS rgb");
  112.     SetMethod(recorder, CONNECT, ReturnTrue);
  113.     SetMethod(recorder, DISCONNECT, ReturnTrue);
  114.     SetMethod(recorder, PREPARETORECORD, PrepareToRecordScrDump);
  115.     SetMethod(recorder, STOPRECORDING, ReturnTrue);
  116.     SetMethod(recorder, SNAPONEFRAME, SnapOneFrameScrDump);
  117.     SetVar(recorder, FRAMESOURCE, NewInt(FS_WINDOW));
  118.     SetVar(recorder, ENABLEDSOURCES, NewInt(FB_SCREEN + FB_WINDOW));
  119.     RegisterRecorder(recorder);
  120. }
  121.  
  122. #ifdef PROTO
  123. void KillScrDump(void)
  124. #else
  125. void KillScrDump()
  126. #endif
  127. {
  128. }
  129.